#ifndef __SOFTPWM_H__
#define __SOFTPWM_H__

#include "platform.h"

#define SOFTPWM_CHANEL  4  // PWM的通道个数
#define SOFTPWM_ARR_INDEPENDENCE    0  // 1:每个通道的PWMARR独立

typedef struct __SoftPWM__
{
    volatile uint32_t   *port     ;
#if (SOFTPWM_ARR_INDEPENDENCE==1)
    uint16_t    ARR[SOFTPWM_CHANEL] ; //  
#else 
    uint16_t    ARR[1] ; // 
#endif
    uint16_t    CCR[SOFTPWM_CHANEL] ;  // 
    uint16_t    cnt[SOFTPWM_CHANEL] ; //
    uint32_t    RST_VALUE ;
    uint32_t    enable ;
}   SFPwm_t ;


/**
 * @brief 初始化SOFT PWM控制器
 * 
 * @param pwmst 
 * @param _port 输出引脚端口
 */
void SFPwm_Init(
    SFPwm_t *pwmst ,
    volatile unsigned int * _port 
)   ;

/**
 * @brief 设置每个通道PWM输出记性 （复位值）
 * 
 * @param pwmst 
 * @param value 
 */
void SFPwm_Polarity(SFPwm_t *pwmst , uint32_t value)  ;
/**
 * @brief 设置每个通道计数器的最大值
 * 
 * @param pwmst 
 * @param chanel 通道号
 * @param value  值
 */

/**
 * @brief 是否使能
 * 
 * @param pwmst 
 * @param chanel 
 * @param isEna 
 */
void SFPwm_Enable(SFPwm_t *pwmst , uint8_t chanel ,uint8_t isEna) ;

void SFPwm_ARR(SFPwm_t *pwmst , uint8_t chanel , uint16_t value) ;

/**
 * @brief 控制占空比
 * 
 * @param pwmst 
 * @param chanel 
 * @param value 
 */
void SFPwm_CCR(SFPwm_t *pwmst , uint8_t chanel , uint16_t value) ;

/**
 * @brief 周期函数中[定时器中调用]
 * 
 * @param pwmst 
 */
void SFPwm_Yield(SFPwm_t *pwmst) ;


#endif 

